package br.com.nemesis.dao;

import br.com.nemesis.excecao.PersistenciaExcecao;
import br.com.nemesis.modelo.Usuario;
import java.util.List;

import javax.persistence.NoResultException;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

public class UsuarioDAO extends DAOGenerico<Usuario, Long> {

    public Usuario buscar(String login, String senha) throws PersistenciaExcecao {
        try {
            CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
            CriteriaQuery criteriaQuery = criteriaBuilder.createQuery();
            Root<Usuario> usuario = criteriaQuery.from(Usuario.class);
            criteriaQuery.where(
                        criteriaBuilder.equal(usuario.<String>get("login"), login),
                        criteriaBuilder.equal(usuario.<String>get("senha"), senha)
                        );
            return (Usuario) getEntityManager().createQuery(criteriaQuery).getSingleResult();
        } catch (NoResultException e) {
            return null;
        } catch (Exception e){
            throw new PersistenciaExcecao(e.getMessage());
        }
    }

    public List<Usuario> listar(String nome) throws PersistenciaExcecao {
        try {
            CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
            CriteriaQuery criteriaQuery = criteriaBuilder.createQuery();
            Root<Usuario> Usuario = criteriaQuery.from(Usuario.class);
            if(nome!=null&&!"".equals(nome)){
                criteriaQuery.where(criteriaBuilder.like(Usuario.<String>get("nome"), nome ));
            }
            return getEntityManager().createQuery(criteriaQuery).getResultList();
        } catch (NoResultException e) {
            return null;
        } catch (Exception e){
            throw new PersistenciaExcecao(e.getMessage());
        }
    }
    
}
